/**
  ******************************************************************************
  * @file    tcp_server.h
  * @author  https://gitee.com/hyk-aajjjj33/c-demo
  * @version V0
  * @date    2025-1-7
  * @brief   使用c++对tcp协议服务器流程的封装
  *          
  ******************************************************************************
  * @attention
  *  注意：
  *     
  *	 推广：
  *  	
  *
  ******************************************************************************
  */

#ifndef __TCP_SERVER_H       // 定义以防止递归包含
#define __TCP_SERVER_H

// (1)、系统头文件
#include <iostream>
#include <string>
#include <vector>
#include <thread>
#include <algorithm>
#include <mutex>
#include <cstring>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <sstream>

using namespace std;
// (2)、自定义头文件

// (3)、宏定义(函数、变量、常量)

// (4)、自定义类型(结构体、联合体、枚举,命名空间，类)


class TcpServer 
{
public:
    struct Device 
    {
        string device_name;
        int socket;
    };

private:
    std::vector<Device> devices;
    int server_socket;
    mutex device_mutex;

public:
    TcpServer();
    ~TcpServer();
    void startServer(const string& ip = "0.0.0.0", uint16_t port = 8080);
    
private:

    void deviceThread(Device device);
    void removeDevice(const Device& device);
    void showOnlineDevices();
};


#endif